package org.qianji.goosql.dql.clause;

import java.util.List;

import org.qianji.goosql.Fragment;
import org.qianji.goosql.field.Field;

/**
 * 查询子句，查询语句中FROM前面的部分。
 * 
 * @author gmz
 * 
 */
public interface Select extends Fragment {

	/**
	 * 获取查询字段数。<br>
	 * 注意此字段数只是在{@link Select}中添加的查询{@link Field}数，未必是最终查询的真正字段数。
	 * 
	 * @return {@link java.lang.Integer int} 字段数
	 */
	public int size();

	/**
	 * 获取查询字段。
	 * 
	 * @return {@link List List&lt;Field&gt;} 查询字段
	 */
	public List<Field> getQueryFields();

	/**
	 * 设置查询字段。
	 * 
	 * @param queryFields
	 *            {@link List List&lt;Field&gt;} 查询字段
	 * @return {@link Select} 当前查询字句
	 */
	public Select setQueryFields(List<Field> queryFields);

	/**
	 * 添加查询字段。
	 * 
	 * @param field
	 *            {@link List List&lt;Field&gt;} 查询字段
	 * @return {@link Select} 当前查询字句
	 */
	public Select addQueryField(Field field);

	/**
	 * 是否剔除重复结果。
	 * 
	 * @return {@link java.lang.Boolean boolean} true-剔除重复结果，false-不剔除
	 */
	public boolean isDistinct();

	/**
	 * 设置是否剔除重复结果。
	 * 
	 * @param distinct
	 *            {@link java.lang.Boolean boolean} true-剔除重复结果，false-不剔除
	 * @return {@link Select} 当前查询字句
	 */
	public Select setDistinct(boolean distinct);

}
